/* thread.c */
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define THREAD_NUMBER		10				
#define REPEAT_NUMBER		10000
// #define DELAY_TIME_LEVELS	10.0
pthread_mutex_t mutex;

long int SUM = 0;			
long int CurrentCount = 0;

void *thrd_func(void *arg)
{
	int thrd_num = (int)arg;
	int delay_time = 0;
	int count = 0;

	int res;
	res = pthread_mutex_lock(&mutex);

    if(res)
	{
		printf("Thread %d lock failed\n", thrd_num);
		pthread_exit(NULL);
	}

	printf("Thread %d is starting\n", thrd_num);
	for (count = 0; count < REPEAT_NUMBER; count++)
	{
// 		delay_time = (int)(rand() * DELAY_TIME_LEVELS/(RAND_MAX)) + 1;
// 		sleep(delay_time);
// 		printf("\tThread %d: job %d delay = %d\n", 
// thrd_num, count, delay_time);
        SUM = SUM + CurrentCount;
        printf("Thread %d: job %d,SUM当前值为:%ld,CurrentCount当前值:%ld\n",thrd_num,count,SUM,CurrentCount);
        CurrentCount++;
	}
	printf("Thread %d finished\n", thrd_num);
    res = pthread_mutex_unlock(&mutex);
	pthread_exit(NULL);
}
int main(void)
{
	pthread_t thread[THREAD_NUMBER];
	int no = 0, res;
	void* thrd_ret;
	
	srand(time(NULL));

	pthread_mutex_init(&mutex, NULL);

	for (no = 0; no < THREAD_NUMBER; no++)
	{

		res = pthread_create(&thread[no], NULL, thrd_func, (void*)no);
		if (res != 0)
		{
			printf("Create thread %d failed\n", no);
			exit(res);
		}
	}
	printf("Create treads success\n Waiting for threads to finish...\n");
	for (no = 0; no < THREAD_NUMBER; no++)
	{
	
		res = pthread_join(thread[no], &thrd_ret);
		// if (!res)
		// {
		// 	printf("Thread %d joined\n", no);
		// }
		// else
		// {
		// 	printf("Thread %d join failed\n", no);
		// }
        pthread_mutex_unlock(&mutex);
	}
    pthread_mutex_destroy(&mutex);
    SUM = SUM + (THREAD_NUMBER * REPEAT_NUMBER);
    printf("结果是:%ld\n",SUM);
	return 0;
}